package exception02;

/**
 * 手动处理异常
 *  我们可以通过throw关键字抛出一个异常对象
 *   格式:throw new 异常类的构造方法;
 *   注意事项:
 *      一旦执行 throw new 异常类的构造方法;语句,该语句下面的代码都不在执行
 *      throw new 异常类的构造方法下面不能有任何语句,因为永远执行不到
 *      throw后面抛出的异常类,只能是异常体系一员
 */
public class ExceptionDemo02 {
    public static void main(String[] args) {
        int[] arr = new int[3];
       /* int i = method(arr,2);
        System.out.println(i);//0*/

         int i = method(null, 1);
        System.out.println(i);

        int j = method(arr, 5);
        System.out.println(j);
    }

    public static int method(int[] arr, int index){
        /*如果传入null*/
        /**
         * 当arr==null,return -1会产生歧义(设计缺陷)
         * 1.定义method()方法的人认为如果arr为null,无法从数组中取元素,因此返回-1
         * 2.使用method()方法的人认为如果arr为null,结果返回-1,认为数组中1索引位置元素值-1
         * return 后面无论写任何整数值,都不能避免这个歧义
         */
        if (arr == null) {
            //return -1;
            throw new NullPointerException("arr的值不能为null");
            //throw new String("abc");
            //int i=3;//下面不能有语句
        }
        if(!(index >0 && index<=arr.length-1)){//索引错误的范围
            throw new ArrayIndexOutOfBoundsException(index + "索引超出数组索引范围");
        }
        return arr[index];
    }
}
